//! PartyMod 基础使用示例
//! 
//! 这个示例展示了如何使用 PartyMod 库进行基本的 Party 管理操作

use partymod::{
    PartyMod, PartyModConfig, Result,
    models::party::*,
    services::*,
};
use std::env;

#[tokio::main]
async fn main() -> Result<()> {
    println!("=== PartyMod 基础使用示例 ===");
    
    // 1. 初始化 PartyMod
    let party_mod = if let Ok(_) = env::var("ENTSRV_HOST") {
        // 从环境变量创建
        PartyMod::from_env().await?
    } else {
        // 使用默认配置
        PartyMod::with_default_config().await?
    };
    
    println!("✓ PartyMod 初始化成功");
    
    // 2. 健康检查
    match party_mod.health_check().await {
        Ok(_) => println!("✓ entsrv 服务连接正常"),
        Err(e) => {
            println!("✗ entsrv 服务连接失败: {}", e);
            return Err(e);
        }
    }
    
    // 3. 获取服务实例
    let party_service = party_mod.party_service();
    let organization_service = party_mod.organization_service();
    let customer_service = party_mod.customer_service();
    let contact_service = party_mod.contact_service();
    
    println!("✓ 服务实例获取成功");
    
    // 4. 创建个人
    println!("\n--- 创建个人 ---");
    let person_id = party_service.create_person(
        Some("张"),
        None,
        Some("三"),
        Some("先生"),
        None,
        None,
        None,
        None
    ).await?;
    
    println!("✓ 创建个人成功，ID: {}", person_id);
    
    // 5. 获取个人信息
    if let Some(party) = party_service.get_party(&person_id).await? {
        println!("✓ 获取个人信息: {:?}", party);
        
        if let Some(person) = party_service.get_person(&person_id).await? {
            println!("✓ 获取详细个人信息: {:?}", person);
        }
    }
    
    // 6. 创建组织
    println!("\n--- 创建组织 ---");
    let org_id = organization_service.create_organization(
        "示例科技有限公司",
        "COMPANY",
        Some("这是一个示例公司")
    ).await?;
    
    println!("✓ 创建组织成功，ID: {}", org_id);
    
    // 7. 建立组织关系
    println!("\n--- 建立组织关系 ---");
    let relationship_id = organization_service.add_organization_member(
        &org_id,
        &person_id,
        "EMPLOYEE",
        Some("软件工程师"),
        None,
        None
    ).await?;
    
    println!("✓ 建立组织关系成功，ID: {}", relationship_id);
    
    // 8. 添加联系方式
    println!("\n--- 添加联系方式 ---");
    
    // 添加邮政地址
    let address_id = contact_service.add_postal_address(
        &person_id,
        "北京市朝阳区",
        Some("建国门外大街1号"),
        None,
        Some("北京市"),
        Some("100000"),
        Some("CN"),
        "HOME_LOCATION",
        true
    ).await?;
    
    println!("✓ 添加邮政地址成功，ID: {}", address_id);
    
    // 添加电话号码
    let phone_id = contact_service.add_phone_number(
        &person_id,
        "86",
        "138",
        "12345678",
        None,
        "PRIMARY_PHONE",
        true
    ).await?;
    
    println!("✓ 添加电话号码成功，ID: {}", phone_id);
    
    // 添加邮箱地址
    let email_id = contact_service.add_email_address(
        &person_id,
        "zhangsan@example.com",
        "PRIMARY_EMAIL",
        true
    ).await?;
    
    println!("✓ 添加邮箱地址成功，ID: {}", email_id);
    
    // 9. 查询联系方式
    println!("\n--- 查询联系方式 ---");
    let contact_info = contact_service.get_party_contact_info(&person_id).await?;
    println!("✓ 联系方式信息: {:?}", contact_info);
    
    // 10. 查询组织成员
    println!("\n--- 查询组织成员 ---");
    let members = organization_service.get_organization_members(&org_id, None).await?;
    println!("✓ 组织成员数量: {}", members.len());
    
    // 11. 创建客户关系
    println!("\n--- 创建客户关系 ---");
    let customer_id = customer_service.create_individual_customer(
        &person_id,
        None,
        None
    ).await?;
    
    println!("✓ 创建客户关系成功，ID: {}", customer_id);
    
    // 12. 查询Party列表
    println!("\n--- 查询Party列表 ---");
    let parties = party_service.find_parties(
        None,
        None,
        None,
        Some(10),
        Some(0)
    ).await?;
    
    println!("✓ 查询到{}个Party", parties.data.len());
    
    println!("\n=== 示例执行完成 ===");
    
    Ok(())
}